package com.gtp.mq.demo.exchange_type.topic;

import java.io.IOException;

import org.apache.commons.lang.SerializationUtils;
import org.junit.Test;

import com.gtp.mq.demo.QueueBindFactory;
import com.rabbitmq.client.MessageProperties;

/*
 * 按照订阅主题
 */
public class TopicProducer extends QueueBindFactory {

	@Test
	public void test1() throws IOException {

		try {
			
			// 发消息
			for (int i = 0; i < 10; i++) {
				/*
				 * channel.basicPublish(Constants.exchangeName, "AAA."+i, //
				 * false,//fasle:如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,丢弃
				 * false,//true:无消费者返还给生产者(3.x后废弃)
				 * MessageProperties.PERSISTENT_TEXT_PLAIN,//消息持久化
				 * deliveryMode:2 SerializationUtils.serialize("mgs_"+i));
				 */
				channel.basicPublish("mytopicExchangeName", // exchange名称
						"r2." + i, // 路由
						true, // mandatory=true
						MessageProperties.PERSISTENT_TEXT_PLAIN, // 持久化文本消息
						SerializationUtils.serialize("mgs_" + i));

				//System.out.println("发送成功!");
			}
			/*
			 * //MessageProperties可以定义很多消息相关的东西 //FIXME:适合企业级系统开发，不适合互联网平台!!!
			 */
			// channel.close();
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	
	/*
	 * #定义一些消息属性,常见的也就文本类型和是否持久化
	 * BasicProperties(
            String contentType, //消息类型,如“text/plain”
            String contentEncoding,
            Map<String,Object> headers,
            Integer deliveryMode, //2-持久化
            Integer priority,
            String correlationId,
            String replyTo,
            String expiration,
            String messageId,
            Date timestamp,
            String type,
            String userId,
            String appId,
            String clusterId)
            
      #channel.basicPublish
      1.发布到不存在的交换机，将导致channel异常关闭,可以channel.addShutdownListener获取错误信息
      2.默认情况下发布操作是不会返回任何信息给生产者的(one-way模式)
	 */
}
